package org.lsi.pl2.main;

import java.io.PrintStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.lsi.pl2.parser.ReferenciaAST;

import antlr.collections.AST;

public class TratamientoErrores {
	public static final String ERROR_RESNOMBRES = "ResNombres";
	public static final String ERROR_SEMANTICO = "Semantico";
	public static final String ERROR_TIPO = "ComprbTipo";
	public static final String ERROR_LR = "LR";
	
	private static TratamientoErrores instance = null;
	
	private Set<String> errores;
	
	public static TratamientoErrores getInstance() {
		if (instance==null) {
			instance = new TratamientoErrores();
		}
		return instance;
	}
	
	private TratamientoErrores() {
		errores = new HashSet<String>();
	}
	
	public void addError(String tipo, String desc) {
		errores.add("("+tipo+") "+desc);
	}
	
	public void addError(String tipo, String desc, AST t) {
		String nuevaDesc = desc;
		if (t instanceof ReferenciaAST) {
			ReferenciaAST tt = (ReferenciaAST) t;
			nuevaDesc += " ["+tt.getLinea()+","+tt.getColumna()+"]";
		}
		addError(tipo,nuevaDesc);
	}
	
	public void informar(PrintStream pw) {
		Iterator<String> it = errores.iterator();
		while(it.hasNext()) {
			String item = it.next();
			pw.println(item);
		}
	}
}
